import { asyncRouterMap, constantRouterMap } from '@/router'

/**
 * 通过meta.role判断是否与当前用户权限匹配
 * @param role
 * @param route
 */
// function hasPermission(roles, route) {
//   if (route.meta && route.meta.role) {
//     return roles.some(role => route.meta.role.indexOf(role) >= 0)
//   } else {
//     return true
//   }
// }

/**
 * 递归过滤异步路由表，返回符合用户角色权限的路由表
 * @param asyncRouterMap
 * @param role
 */
// function filterAsyncRouter(asyncRouterMap, roles) {
//   const accessedRouters = asyncRouterMap.filter(route => {
//     if (hasPermission(roles, route)) {
//       if (route.children && route.children.length) {
//         route.children = filterAsyncRouter(route.children, roles)
//       }
//       return true
//     }
//     return false
//   })
//   return accessedRouters
// }

const permission = {
  state: {
    routers: constantRouterMap,
    addRouters: [],
    roleList: [] // 用户权限
  },
  mutations: {
    SET_ROUTERS: (state, routers) => {
      state.addRouters = routers
      state.routers = constantRouterMap.concat(routers)
    },
    SET_ROLELIST: (state, roles) => {
      state.roleList = roles
    }
  },
  actions: {
    GenerateRoutes({ commit }, data) {
      return new Promise(resolve => {
        const { roles } = data
        // 去掉路由权限
        // let accessedRouters
        // if (roles['role'].indexOf('admin') >= 0) {
        // if (roles) {
        //   // accessedRouters = adminRouterMap
        // } else {
        //   for (var key = 0; key < asyncRouterMap.length; key++) {
        //     // 如果一级菜单需要权限访问
        //     if (asyncRouterMap[key]['roles']) {
        //       // 首先判断一级菜单是否包含此权限
        //       let has = false
        //       key = parseInt(key) // 转数字
        //       for (const i of asyncRouterMap[key]['roles']) {
        //         if (roles['list'].indexOf(i) >= 0) {
        //           has = true
        //         }
        //       }
        //       // 如果不存在则移出权限列表
        //       if (!has) {
        //         asyncRouterMap.splice(key, 1)
        //         key = key - 1
        //       } else {
        //         // 如果存在这个数组权限，那么判断子元素有哪些存在权限
        //         for (var k = 0; k < asyncRouterMap[key]['children'].length; k++) {
        //           // 如果是需要权限判断的路由
        //           if (asyncRouterMap[key]['children'][k]['roles']) {
        //             let childHas = false
        //             k = parseInt(k) // 转数字
        //             for (const i of asyncRouterMap[key]['children'][k]['roles']) {
        //               if (roles['list'].indexOf(i) >= 0) {
        //                 childHas = true
        //               }
        //             }
        //             // 如果不存在则移出权限列表
        //             if (!childHas) {
        //               asyncRouterMap[key]['children'].splice(k, 1)
        //               k = k - 1 // 防止splice干扰数组
        //               continue
        //             }
        //           }
        //           // 如果需要组管理权限
        //           if (asyncRouterMap[key]['children'][k]['needLeader'] !== undefined && asyncRouterMap[key]['children'][k]['needLeader'] === true && roles['leader'] !== true) {
        //             asyncRouterMap[key]['children'].splice(k, 1)
        //             k = k - 1 // 防止splice干扰数组
        //           }
        //         }
        //       }
        //     } else {
        //       // 如果存在这个数组权限，那么判断子元素有哪些存在权限
        //       for (k = 0; k < asyncRouterMap[key]['children'].length; k++) { // 这里不用重新定义k不知道会不会有坑
        //         // 如果是需要权限判断的路由
        //         if (asyncRouterMap[key]['children'][k]['roles']) {
        //           let childHas = false
        //           k = parseInt(k) // 转数字
        //           for (const i of asyncRouterMap[key]['children'][k]['roles']) {
        //             if (roles['list'].indexOf(i) >= 0) {
        //               childHas = true
        //             }
        //           }
        //           // 如果不存在则移出权限列表
        //           if (!childHas) {
        //             asyncRouterMap[key]['children'].splice(k, 1)
        //             k = k - 1 // 防止splice干扰数组
        //             continue
        //           }
        //         }
        //         // 如果需要组管理权限
        //         if (asyncRouterMap[key]['children'][k]['needLeader'] !== undefined && asyncRouterMap[key]['children'][k]['needLeader'] === true && roles['leader'] !== true) {
        //           asyncRouterMap[key]['children'].splice(k, 1)
        //           k = k - 1 // 防止splice干扰数组
        //         }
        //       }
        //     }
        //   }
        //   accessedRouters = asyncRouterMap
        //   // accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
        // }
        // commit('SET_ROUTERS', accessedRouters)
        commit('SET_ROLELIST', roles['list'])
        commit('SET_ROUTERS', asyncRouterMap)
        resolve()
      })
    }
  }
}

export default permission
